LeetCode 117. Populating Next Right Pointers in Each Node II
Description
Follow up for problem “Populating Next Right Pointers in Each Node“.
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
- You may only use constant extra space.
For example,
Given the following binary tree,
|
|
After calling your function, the tree should look like:
|
|
Solution
通过BFS层序遍历节点,只要遍历过程中维护当前节点的前一个节点pre,每次将pre中的next指向当前节点就能将所有节点根据层序遍历的次序串起来,只要在将每层最右边的节点的next指针赋值为空即可。
对于前一题[Populating Next Right Pointers in Each Node],由于题目限定了测试用例均为满二叉树,因此只要从根节点出发,一直沿着右子树依次将途径的节点的next赋值为空后所有指针满足条件。
本题条件相比上一题缺少了满二叉树的限定,每层的最右端的节点未必是父节点的右孩子,因此需要维护每层最右端的节点。解中采取的方法是开一个数组vec[n]存放第n层最右端的节点。由于层序遍历时可以控制在每层中依次从左至右遍历节点,因此在遍历时将当前节点覆盖到记录最右端节点的数组中即可,最右端的节点将不会被覆盖。
题中暗示本题和前一题最优空间复杂度为O(1),上述解法为O(n),有待进一步思考。
Code
|
|